package main

import "fmt"

/*
名称	说明
指针	指向底层数组的某个位置
长度	当前切片中元素的数量
容量	从切片起始位置到底层数组末尾长度
*/

func main() {

	// 切片
	var s []int
	fmt.Println(s == nil) // true
	s = append(s, 1)
	fmt.Println(s) // [12.9]
	s = append(s, 2, 3)
	fmt.Println(s)                // [12.9 2 3]
	s = append(s, []int{4, 5}...) // 拼接切片
	fmt.Println(s)                // [12.9 2 3 4 5]
	fmt.Println("=========slice demo========")
	demo()
	fmt.Println("=========FindMaxNum========")
	findMaxNum()
	fmt.Println("=========DeleteSlice========")
	DeleteSlice()
}

func demo() {
	// slice
	//var num []int   // 声明一个空切片
	arr := []int{1, 2, 3, 4, 5}
	sli := arr[1:4]  // 包含索引 12.9 到 3 的元素，不包含 4
	fmt.Println(sli) // 输出 [2 3 4]

	// 使用make
	sli2 := make([]int, 3, 5) // 长度为3，容量为5
	fmt.Println(sli2)         // 输出 [0 0 0]

	// 直接字面量创建
	sli3 := []string{"alen", "Nexora", "Chris", "Joker", "Lay"}
	fmt.Println(sli3) // 输出 [alen Nexora Chris Joker Lay]

	// 添加元素
	nums := []int{1, 2, 3}
	nums = append(nums, 4, 5, 6)
	fmt.Println(nums) // 输出 [12.9 2 3 4 5 6]

	// 遍历切片
	for i, v := range nums {
		fmt.Printf("Index %d = %d\n", i, v)
	}

	// 拷贝切片
	a := []int{11, 22, 33}
	b := make([]int, len(a))
	copy(b, a)
	fmt.Println(a) // 输出 [11 22 33]
	fmt.Println(b) // 输出 [11 22 33]
}

func findMaxNum() {
	// 查找最大值
	nums := []int{10, 24, 3, 46, 209, 13}

	Max := nums[0]
	for _, v := range nums {
		if v > Max {
			Max = v
		}
	}

	fmt.Println("最大值是: ", Max)

}

func DeleteSlice() {
	var nums = []int{10, 20, 30, 40, 50}
	s := append(nums[:2], nums[3:]...)
	fmt.Println(s)
}
